package kr.co.bettersoft.usedmarketandroid.activity;

import java.util.List;

import kr.co.bettersoft.usedmarketandroid.common.CommonConstant;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;

public class NotiTouchActionControlActivity extends Activity{
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수
	String TAG = "NotiTouchActionControlActivity";

	UsedMarketChatRoomActivity usedMarketChatRoomActivity = (UsedMarketChatRoomActivity)UsedMarketChatRoomActivity.usedMarketChatRoomActivity;

	SharedPreferences sharedPrefCustom;	// 공용 프립스	
	String phoneNum = "";
	public static int count = 0;		// 프로세스 다중 실행 방지 위한 카운터

	// 전달 받은 데이터
	Intent receivedIntent;
	
	String runMode = "";
	String receivedPhoneNum = "";
	
	
	String usedMarketChatIdUsedMarketChat = "";
	String usedMarketChatIdUsedMarketProduct = "";
	String usedMarketChatOwner = "";

//	String savedUserId = "";
	
	Boolean appRunningYn; // = sharedPrefCustom.getBoolean("appRunningYn", false);
	Boolean chatRoomUsingYn; // = sharedPrefCustom.getBoolean("chatRoomUsingYn", false);

	//////////////////////////////////////////////////////////////////////////////////////////////////////	


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE );	// 타이틀바 제거
		Log.w(TAG,"NotiTouchActionControlActivity onCreate");

		// 프립
		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

		phoneNum = sharedPrefCustom.getString("phoneNum", "");
		
//		loginYn = sharedPrefCustom.getString("loginYn", "N");
		appRunningYn = sharedPrefCustom.getBoolean("appRunningYn", false);
		chatRoomUsingYn = sharedPrefCustom.getBoolean("chatRoomUsingYn", false);

		
		// 전달받은 데이터 꺼내기
		receivedIntent = getIntent();
		runMode = receivedIntent.getStringExtra("RunMode");
//		phoneNum = receivedIntent.getStringExtra("phoneNum");
		receivedPhoneNum = receivedIntent.getStringExtra("phoneNum");
		usedMarketChatIdUsedMarketChat = receivedIntent.getStringExtra("usedMarketChatIdUsedMarketChat");
		usedMarketChatIdUsedMarketProduct = receivedIntent.getStringExtra("usedMarketChatIdUsedMarketProduct");
		usedMarketChatOwner = receivedIntent.getStringExtra("usedMarketChatOwner");
		
		
		if(runMode==null){
			Log.d(TAG,"runMode is null");
			runMode = "";
		}
		if(receivedPhoneNum==null){
			Log.d(TAG,"receivedPhoneNum is null");
			receivedPhoneNum = "";
		}
		if(usedMarketChatIdUsedMarketChat==null){
			Log.d(TAG,"usedMarketChatIdUsedMarketChat is null");
			usedMarketChatIdUsedMarketChat = "";
		}
		if(usedMarketChatIdUsedMarketProduct==null){
			Log.d(TAG,"usedMarketChatIdUsedMarketProduct is null");
			usedMarketChatIdUsedMarketProduct = "";
		}
		if(usedMarketChatOwner==null){
			Log.d(TAG,"usedMarketChatOwner is null");
			usedMarketChatOwner = "";
		}
		Log.d(TAG,"runMode :"+runMode);
		Log.d(TAG,"receivedPhoneNum :"+receivedPhoneNum);
		Log.d(TAG,"usedMarketChatIdUsedMarketChat :"+usedMarketChatIdUsedMarketChat);
		Log.d(TAG,"usedMarketChatIdUsedMarketProduct :"+usedMarketChatIdUsedMarketProduct);
		Log.d(TAG,"usedMarketChatOwner :"+usedMarketChatOwner);

		appRunningYn = sharedPrefCustom.getBoolean("appRunningYn", false);
		chatRoomUsingYn = sharedPrefCustom.getBoolean("chatRoomUsingYn", false);
		
		
		String currentUsedMarketChatIdUsedMarketChat = sharedPrefCustom.getString("currentUsedMarketChatIdUsedMarketChat", "");
		String currentUsedMarketChatIdUsedMarketProduct = sharedPrefCustom.getString("currentUsedMarketChatIdUsedMarketProduct", "");
		String currentUsedMarketChatOwner = sharedPrefCustom.getString("currentUsedMarketChatOwner", "");
		
		try{
			// 실행중인지 확인
			isRunningProcess(this);	
			if(count<2 && appRunningYn){	// 실행중
				Log.d(TAG,"실행중");

//				// ### 별도 로그인 없음
//				// 로그인 여부 확인. 로그인 하지 않았다면 그냥 로그인 화면으로 보냄.
//				if(loginYn.equals("N")){		// 로그인 하지 않은 상태
//					Log.d(TAG,"로그인 안함");
//					// ### 
////					// 지금 로그인 화면임.  값을 전달.
////					LoginActivity.receivedUserId = receivedUserId;
////					LoginActivity.receivedChatRoomId = receivedChatRoomId;
////					LoginActivity.receivedChatRoomOwner = receivedChatRoomOwner;
//				}else{		// 로그인 한 상태
				
					// 노티를 터치한 시점에 저장된 아이디와 노티가 생성되었을때의 아이디가 동일한지 체크한다. 다른 아이디로 들어와서 터치하면 곤란하기 때문.		phoneNum	receivedPhoneNum
					Log.d(TAG,"phoneNum::"+phoneNum+"//receivedPhoneNum::"+receivedPhoneNum);
					if((!phoneNum.equals("")) && phoneNum.equals(receivedPhoneNum) ){		// 노티 생성 시점과, 터치 시점의 사용자가 동일함.
						Log.d(TAG,"사용자 동일함");
						// 채팅방에 있는지 확인
						if(chatRoomUsingYn){	// 현재 채팅방에 있음
							Log.d(TAG,"채팅방에 있음");

							// 동일한 채팅방인지 확인. 방번호와 방장 아이디이용.
							if(usedMarketChatIdUsedMarketChat.equals(currentUsedMarketChatIdUsedMarketChat) 
									&& usedMarketChatIdUsedMarketProduct.equals(currentUsedMarketChatIdUsedMarketProduct)
									&& usedMarketChatOwner.equals(currentUsedMarketChatOwner)){	// 동일한 채팅방인가?
								Log.d(TAG,"same room - skip");
								// 동일한 채팅방에 있음 - 리프레시 생략.

							}else{	// 다른 채팅방에 있을때 데이터 갱신 후 리프레시 
								Log.d(TAG,"other chat room - update & refresh ### ");
								
								// 제목 문제 때문에 보류. ### 
//								usedMarketChatRoomActivity.updateDataAndCallRefresh(usedMarketChatIdUsedMarketChat, usedMarketChatIdUsedMarketProduct, usedMarketChatOwner);
							}                

						}else {		// 채팅방에 없을때 데이터 전달하여 실행 
							Log.d(TAG,"채팅방에 없음 - move to chat room ### ");

							Intent intent = new Intent(NotiTouchActionControlActivity.this, UsedMarketChatRoomActivity.class);
							intent.putExtra("usedMarketChatIdUsedMarketChat", usedMarketChatIdUsedMarketChat);			// 방번호
							intent.putExtra("usedMarketChatIdUsedMarketProduct", usedMarketChatIdUsedMarketProduct);	// 
							intent.putExtra("usedMarketChatOwner", usedMarketChatOwner);								// 
							intent.putExtra("subject", "");			
							// 이동하면 처리됨. 
//							SharedPreferences.Editor saveChatRoomStatusPref = sharedPrefCustom.edit();
//							saveChatRoomStatusPref.putBoolean("chatRoomUsingYn", true);			   		// 채팅방 사용중. (푸시를 통한 리프레시 기능을 위해 필요)	
//							saveChatRoomStatusPref.putString("currentChatRoomId", receivedChatRoomId);		//  위의 두 값이 바뀐후 리프레시한다면 채팅방이 바뀌는 효과.(타이틀도 바꿔야)
//							saveChatRoomStatusPref.putString("currentChatRoomOwner", receivedChatRoomOwner);	//  그에 따른 변수도 함께 바껴야 (최초 조회 여부 관련) 	
//							saveChatRoomStatusPref.commit();
							
							// 시작하지 않음. 제목이 없음. ### 
//							startActivity(intent);
						}
					}else{		// 사용자가 다르다면 푸시는 무시한다. 다른 사람의 것이기 때문.
						Log.d(TAG,"사용자 다름 - noti ignore");
					}
//				}

			}else{	// 실행중이 아님 --> 로그인 페이지.
				Log.d(TAG,"실행중이 아님  - login gogo (app start)");
//				Intent intent = new Intent(NotiTouchActionControlActivity.this, LoginActivity.class);
				Intent intent = new Intent(NotiTouchActionControlActivity.this, UsedMarketLauncherActivity.class);
//				intent.putExtra("userId", receivedUserId);		
//				intent.putExtra("chatRoomId", receivedChatRoomId);		
//				intent.putExtra("chatRoomOwner", receivedChatRoomOwner);	
				startActivity(intent);
			}	
		}catch(Exception e){	// CommonUtils 가 생성되지 않은건 어플이 실행되지 않은것과 같다.
			Log.d(TAG,"no exected  - login go (app start)");
//			Intent intent = new Intent(NotiTouchActionControlActivity.this, LoginActivity.class);
			Intent intent = new Intent(NotiTouchActionControlActivity.this, UsedMarketLauncherActivity.class);
//			intent.putExtra("userId", receivedUserId);		
//			intent.putExtra("chatRoomId", receivedChatRoomId);		
//			intent.putExtra("chatRoomOwner", receivedChatRoomOwner);	
			startActivity(intent);
		}
		finish();
	}

	/**
	 * isRunningProcess
	 *  중복 실행 방지를 위해 카운팅 체크를 한다.
	 *
	 * @param context
	 * @param packageName
	 * @return isRunning
	 */
	public static boolean isRunningProcess(Context context) {
		String PACKAGE_NAME;
		PACKAGE_NAME = context.getApplicationContext().getPackageName();
		count = 0;
		boolean isRunning = false;
		ActivityManager actMng = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);   
		List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
		for(RunningAppProcessInfo rap : list) {
			if(rap.processName.equals(PACKAGE_NAME)) {
				isRunning = true;
				count= count+1;		// 실행중인 어플수 (중복 실행 방지 용)
				Log.d("Log","count:"+count);
				break;
			}
		}
		return isRunning;
	}


}